根据前序和中序序列,建立二叉树(java实现)

本文介绍如何利用Java根据给定的前序和中序序列构建二叉树,并讨论了二叉树的后序遍历问题。通过这种方法,可以恢复二叉树的结构,前序遍历为{1,2,4,7,3,5,6,8},中序遍历为{4,7,2,1,5,3,8,6}。" 132340365,10794535,CAPL与SOME/IP:从函数到协议实现的深度解析,"['网络协议', 'CAPL', 'SOME/IP', '汽车通信', '网络']
摘要由CSDN通过智能技术生成

根据前序序列:int[] preSort={1,2,4,7,3,5,6,8};

中序序列:int[] inSort=new int[]{4,7,2,1,5,3,8,6};

建立二叉树,求后序遍历等问题。

前序遍历,中序遍历,后序遍历,层次遍历,四种遍历中,必须包含中序遍历+三选一,两个序列就可以恢复出二叉树的形态。


//方案一:
package com.mytest.mymain;


import java.util.Arrays;


 //定义节点
class BinaryTree{
public int value;
public BinaryTree leftNode;
public BinaryTree rightNode;
BinaryTree(int x) { value = x; }
}


public class ConstrontTree {

public static void main(String[] args) throws Exception {
int[] preSort={1,2,4,7,3,5,6,8};
int[] inSort=new int[]{4,7,2,1,5,3,8,6};
BinaryTree root=startBuildTree(preSort,inSort);
}
//01递归生成树
private static BinaryTree startBuildTree(int[] preSort,int[] inSort) throws Exception {
//异常判断
if(preSort==null || inSort==null){
return null;
}
if(preSort.length!=inSort.length){
throw new Exception("不满足条件
Java中,根据前序中序遍历结果重建二叉树是一个常见的算法题。前序遍历的特点是首先访问根节点,而中序遍历的特点是根节点将树分为左子树和右子树。根据这两个序列,我们可以递归地重建原始的二叉树。 以下是一个简单的实现示例: ```java class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public class Solution { private int preIndex = 0; public TreeNode buildTree(int[] preorder, int[] inorder) { return buildTreeHelper(preorder, inorder, 0, inorder.length - 1); } private TreeNode buildTreeHelper(int[] preorder, int[] inorder, int inStart, int inEnd) { if (inStart > inEnd) { return null; } // 前序遍历中的第一个节点就是根节点 TreeNode root = new TreeNode(preorder[preIndex++]); // 在中序遍历中找到根节点的位置 int inIndex = 0; for (int i = inStart; i <= inEnd; i++) { if (inorder[i] == root.val) { inIndex = i; break; } } // 构建左子树和右子树 root.left = buildTreeHelper(preorder, inorder, inStart, inIndex - 1); root.right = buildTreeHelper(preorder, inorder, inIndex + 1, inEnd); return root; } } ``` 这段代码定义了一个二叉树节点`TreeNode`,并在`Solution`类中提供了`buildTree`方法。该方法接受两个数组:一个是前序遍历的结果`preorder`,另一个是中序遍历的结果`inorder`。`buildTreeHelper`方法是一个递归函数,用于根据前序中序数组构建二叉树
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值